#include <iostream>

using namespace std;

char get_closed_bracket(char c) {
    if (c == '[')
    {
        return ']';
    }
    else if (c == '(')
    {
        return ')';
    }
    else if (c == '<') 
    {
        return '>';
    }
    else if (c == '{') 
    {
        return '}';
    }
    else {
        return 0;
    }
}

char stack[1000];
int top = -1;


bool push(char x) {
    if (top >= 999) {
        return false;
    } else {
        top++;
        stack[top] = x;
        return true;
    }
}


char pop() {
    if (top < 0) {
        return 0;
    } else {
        char c = stack[top];
        top--; 
        return c; 
    }
}


bool isEmpty() {
    return (top < 0);
}


bool check_brackets(string s) {
    for (char c : s) {  
        if (c == '[' or c == '(' or c == '{' or c == '<') {
            push(c); 
        } else {
            char topElement = pop(); 
            if (topElement == 0) { 
                return false; 
            }
            
            if (get_closed_bracket(topElement) != c) { 
                return false;
            }
        }
    }
    return isEmpty();
}


int main() {
    string s; 
    getline (cin, s);
    cout << (check_brackets(s) ? "YES" : "NO"); 
    return 0;
}